﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OBL1_DiseñoDeAplicaciones.ObjetosDeNegocio
{
    public class Proyecto
    {
        private static int IdProyecto = 0;

        private int codigo;
        private string nombre;
        private Cliente cliente;
        private ListaSubdivision subdivisiones;
  
        #region properties
        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        public int Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }
        public Cliente Cliente
        {
            get { return cliente; }
            set { cliente = value; }
        }
        public ListaSubdivision Subdivisiones
        {
            get { return subdivisiones; }
            set { subdivisiones = value; }
        }
        #endregion properties

        //Constructor por defecto
        public Proyecto(string nombre, Cliente cliente, Tarea tarea) {
            this.codigo = IdProyecto;
            this.nombre = nombre;
            this.cliente = cliente;
            this.subdivisiones = new ListaSubdivision();
            this.subdivisiones.AgregarSubdivision(tarea);
            tarea.Parent = this;
            IdProyecto++;
        }

        //Constructor de copia
        public Proyecto(int codigo, string nombre, Cliente cliente, ListaSubdivision subdivisiones)
        {
            this.codigo = codigo;
            this.nombre = nombre;
            this.cliente = cliente;
            this.subdivisiones = subdivisiones;
        }

        public DateTime ObtenerFechaInicio() {
            return this.subdivisiones.ResolverFechaInicio();
        }
        
        public Double ObtenerCostoTotal(int iva) {
            return this.subdivisiones.ResolverCostoTotal(iva);
        }
        
        public double CalcularCostoParaCliente(double costoSinImpuestos,int iva) {
            return this.cliente.CalcularCosto(costoSinImpuestos,iva);
        }
        
        public Proyecto Clonar() {
            //Se inicializa el proyecto sin subdivisiones
            Proyecto p = new Proyecto(this.codigo, this.nombre, this.cliente.Clonar(), null);
            if (this.subdivisiones.Elementos != null)
            {
                //si tengo subdivisiones, las recorro y clono
                p.subdivisiones = new ListaSubdivision();
                foreach (Subdivision s in this.Subdivisiones.Elementos){
                    p.subdivisiones.AgregarSubdivision(s.Clonar(p));
                }
            }
            return p;
        }
    }
}
